/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Controllers;

import cl.ventas.beans.ProductoBean;
import cl.ventas.modelo.Carrito;
import cl.ventas.modelo.DetalleVenta;
import cl.ventas.modelo.Producto;
import cl.ventas.modelo.Usuario;
import cl.ventas.modelo.Ventas;
import cl.ventas.modelo.dao.DetalleVentaDao;
import cl.ventas.modelo.dao.ProductoControl;
import cl.ventas.modelo.dao.VentasDao;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Vector;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;


public class clienteController extends MultiActionController{
    
    public ModelAndView salir(HttpServletRequest request, HttpServletResponse response) throws Exception {
        HttpSession sesion = request.getSession();
        sesion.removeAttribute("carrito");
        sesion.removeAttribute("usuario");
        sesion.removeAttribute("producto");
        ModelAndView mav = new ModelAndView("login");
        Date fecha = new Date();
        mav.addObject("fecha", fecha);
        return mav;
    }
    public ModelAndView listado(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("listado");
        return mav;
    }
    public ModelAndView AgregarCarrito1(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("AgregarCarrito1");
        return mav;
    }
    public ModelAndView AgregarCarrito2(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("AgregarCarrito2");
        return mav;
    }
    public ModelAndView AgregarCarrito3(HttpServletRequest request, HttpServletResponse response) throws Exception {
        HttpSession sesion=request.getSession();
        Vector<Carrito> carritoCompra=null;
        ProductoBean b = new ProductoBean();
        
        Usuario usuario=(Usuario)sesion.getAttribute("usuario");
        //Si se creo la sesion con el atributo de carrito
        if(sesion.getAttribute("carrito")!=null){
            //Si existe una sesion con ese atributo, se obtiene los datos de esa sesion
            carritoCompra=(Vector<Carrito>)sesion.getAttribute("carrito");
        }else{
            //Si no existe esa sesion se crea el carrito de compras
            carritoCompra=new Vector<Carrito>();

        }
        
        //Obtenemos los valores de la cajas de texto

        int codigo = Integer.parseInt(request.getParameter("codigo").trim());
        b.setCodigo(codigo);
        Producto producto = b.findById();
        int cantidad = Integer.parseInt(request.getParameter("cantidad").trim());
        int subTotal =  cantidad * producto.getPrecio();
        //Creo el elemento carrito
        Carrito car=new Carrito();
        car.setCodigo(codigo);
        car.setProducto(producto);
        car.setUsuario(usuario);
        car.setCantidadPedida(cantidad);
        car.setSubTotal(subTotal);
        //Agrego el carrito a mi vector
        carritoCompra.add(car);
        sesion.setAttribute("carrito",carritoCompra);
        ModelAndView mav = new ModelAndView("AgregarCarrito3");
        mav.addObject("mensaje", "CARRITO DE COMPRA VACIO");
        return mav;
    }
    public ModelAndView VerCarrito(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("AgregarCarrito3");
        mav.addObject("mensaje", "CARRITO DE COMPRA VACIO");
        return mav;
    }
    public ModelAndView FinalizarCompra(HttpServletRequest request, HttpServletResponse response) throws Exception {
        HttpSession sesion = request.getSession();
        Vector<Carrito> carritoCompra = null;
        carritoCompra = (Vector<Carrito>) sesion.getAttribute("carrito");
     
        int numero = (int) carritoCompra.get(0).getSubTotal();
        Vector<Producto> productos=(Vector<Producto>)sesion.getAttribute("productos");

        //Genera fecha Ej: 20-04-2009
        Calendar c2 = new GregorianCalendar();   
        String fecha = "" + c2.get(Calendar.DATE) + "-";
        fecha += (c2.get(Calendar.MONTH) + 1) + "-";
        fecha += c2.get(Calendar.YEAR);
        
        
        //Suma el total de la compra y guarda el usuario
        double Total = 0;
        for(int i=0; i<carritoCompra.size(); i++){
            Total += carritoCompra.get(i).getSubTotal();
        }
        Usuario u = carritoCompra.get(0).getUsuario();
        //Crea un objeto Ventas con los datos de la venta (fecha actual, total de todos los productos, codigo del usuario
        Ventas v = new Ventas(fecha, Total, u.getUsuario_codigo());
        //Instancia un objeto ventasDao y guarda los datos en la BD
        VentasDao ventasdao = new VentasDao();
        ventasdao.save(v);
        
        DetalleVentaDao dBD = new DetalleVentaDao();
        ProductoControl prod = new ProductoControl();
        DetalleVenta d = null;
        int item = 1;
        for(int i=0; i<carritoCompra.size(); i++){
            if(carritoCompra.get(i).getCodigo()!=0){
                d = new DetalleVenta();
                d.setCodigo(ventasdao.findMax());
                //Codigo del Venta - item, el "numero" del producto en la venta
                d.setItem(item);
                item++;
                int Cod = carritoCompra.get(i).getCodigo();
                int Cant = carritoCompra.get(i).getCantidadPedida();
                d.setProducto_Codigo(Cod);
                d.setCantidad(Cant);
                d.setSubtotal(carritoCompra.get(i).getSubTotal());
                dBD.save(d);
                int x = (int) carritoCompra.get(i).getProducto().getStock() - Cant;
                prod.ProductoStock(x, Cod);
            }
        }
        ModelAndView mav = new ModelAndView("AgregarCarrito3");
        mav.addObject("mensaje", "COMPRA FINALIZADA CON EXITO");
        sesion.removeAttribute("carrito");
        return mav;
    }
    public ModelAndView EditarCarrito(HttpServletRequest request, HttpServletResponse response) throws Exception {
        ModelAndView mav = new ModelAndView("EditarCarrito");
        HttpSession sesion = request.getSession();
        Carrito carrito = null;
        //si no encuentra datos en "editaCarrito" solo redirije al jsp    
        if(sesion.getAttribute("editaCarrito")!=null){
            carrito = (Carrito) sesion.getAttribute("editaCarrito");
            int car = carrito.getCodigo();
            Vector<Carrito> carritoCompra = null;
            carritoCompra = (Vector<Carrito>) sesion.getAttribute("carrito");
            Producto prod = carritoCompra.get(car).getProducto();
            Usuario u = (Usuario) request.getSession().getAttribute("usuario");
            //Se usa "cantidadPedida" como variable auxiliar para elegir el tipo de operacion
            //0 lleva directo al formulario para editar y lo reenvia como 2
            //1 elimina el producto
            //2 edita el producto
            //Eliminar
            if(carrito.getCantidadPedida()==1){
                carritoCompra.remove(car);
                sesion.setAttribute("carrito", carritoCompra);
                mav = new ModelAndView("AgregarCarrito3");
                mav.addObject("mensaje", "CARRITO DE COMPRAS VACIO");
                sesion.removeAttribute("editaCarrito");
            //Editar
            }else if(carrito.getCantidadPedida()==2){
                Carrito c = new Carrito();
                c.setCodigo(Integer.parseInt(request.getParameter("codigo")));
                c.setProducto(prod);
                c.setUsuario(u);
                int Cantidad = Integer.parseInt(request.getParameter("cantidad").trim());
                c.setCantidadPedida(Cantidad);
                c.setSubTotal(Cantidad * prod.getPrecio());
                carritoCompra.set(car, c);
                sesion.setAttribute("carrito", carritoCompra);
                mav = new ModelAndView("AgregarCarrito3");
                mav.addObject("mensaje", "CARRITO DE COMPRAS VACIO");
                sesion.removeAttribute("editaCarrito");
            }
        }else
        {
            sesion.setAttribute("editaCarrito", new Carrito());
        }
        return mav;
    }
}
